#pragma once
namespace basic_graph
{
//Views
struct all_way_view_t:GraphView
{
public:
    virtual bool CallVertexPredicate(Vertex::ref v)
    {
        return true;
    }
    virtual bool CallEdgePredicate(Edge::ref e)
    {
        return true;
    }
    Graphall_way_view_t(Graph::shared_ptr graph_ptr):GraphView(graph_ptr)
    {
        
    }
};


struct GraphMotorWayView:GraphView
{
public:
    virtual bool CallVertexPredicate(Vertex::ref v)
    {
        return true;
    }
    virtual bool CallEdgePredicate(Edge::ref e)
    {
        if (e.highway_ >=1 && e.highway_ <= 9)
                            return true;
                        else
                            return false;
    }
    GraphMotorWayView(Graph::shared_ptr graph_ptr):GraphView(graph_ptr)
    {
        
    }
};
struct GraphBicycleWayView:GraphView
{
public:
    virtual bool CallVertexPredicate(Vertex::ref v)
    {
        return true;
    }
    virtual bool CallEdgePredicate(Edge::ref e)
    {
        if ( (e.highway_ >=2 && e.highway_ <= 9) ||
                              (e.highway_ == 11)||
                              (e.highway_ == 13))
                            return true;
                        else
                            return false;
    }
    GraphBicycleWayView(Graph::shared_ptr graph_ptr):GraphView(graph_ptr)
    {
        
    }
};


struct GraphFootWayView:GraphView
{
public:
    virtual bool CallVertexPredicate(Vertex::ref v)
    {
        return true;
    }
    virtual bool CallEdgePredicate(Edge::ref e)
    {
        if ( (e.highway_ >=2 && e.highway_ <= 11) ||
                              (e.highway_ == 14))
                            return true;
                        else
                            return false;
    }
    GraphFootWayView(Graph::shared_ptr graph_ptr):GraphView(graph_ptr)
    {
        
    }
};
}